package com.zhanglijie.base.datamoveprodandconsume;


import java.util.concurrent.atomic.AtomicInteger;


/**
 * @author zhanglijie
 * @version 1.0
 * @since 1.1.0 2022/3/13 0013 2:02
 *  解决 MyConsumer2的jmm问题
 * 方式1： volitile 或者atuoInteger原子类 ==》这个还不能解决会有同步问题，比如超出打印5000，原因是4999时候最后四个线程同时判断 while(cur.get()<total)都会成立进去更改
 * 方式2： sycn同步锁 这个可以解决。 后面消费组4采用接口实现
 *
 */
public class MyConsumer3 extends Thread{
    private final static int total = 10000;

    private static AtomicInteger cur = new AtomicInteger(0);
    @Override
    public void run() {
        while(cur.get()<total){
            System.out.println(Thread.currentThread().getName()+"正在消费第"+cur.incrementAndGet()+"数据包");
        }
    }

    // private static volatile  int   cur =    0;
    // @Override
    // public void run() {
    //     while(cur <total){
    //         System.out.println(Thread.currentThread().getName()+"正在消费第"+(++cur)+"数据包");
    //     }
    // }
}
